home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib06.dsk
/
BUDGET TRAC.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
16KB
|
397 lines
10 REM **************************
20 REM * APPLE BUDGET TRAC *
30 REM * BY CHRIS EXNER *
40 REM * COPYRIGHT (C) 1981 *
50 REM * BY MICRO-SPARC INC *
60 REM * LINCOLN, MA. 01773 *
70 REM **************************
72 GOTO 100
80 REM ';' PRINTING
81 PRINT SPC( PK -SY)V$;
82 SY = SY +(PK -SY) + LEN(V$)
83 RETURN
85 REM END OF LINE PRINTING
86 PRINT SPC( PK -SY)V$
87 PK = 0:SY = 0
88 RETURN
100 TEXT : HOME : HTAB 11: PRINT "** BUDGET TRAC **"
110 PRINT : PRINT " THIS SYSTEM WILL ALLOW YOU TO SET"
120 PRINT "UP A MONTHLY BUDGET FOR TWENTY-FOUR "
130 PRINT "EXPENSE ACCOUNTS. YOU MAY THEN COMPARE"
140 PRINT "YOUR ACTUAL EXPENSES (GATHERED FROM"
150 PRINT "TRAC FILES 'BALANCES', 'CARD #' "
160 PRINT "AND 'CHECK #') VERSUS YOUR BUDGETED"
170 PRINT "EXPENSES.
175 REM * ACCEPT OUTPUT DEVICE
180 VTAB 11: PRINT "ENTER THE REPORT OUTPUT DEVICE": PRINT "YOU WISH TO USE."
190 HTAB 10: PRINT "1 = SCREEN ONLY"
195 HTAB 10: PRINT "2 = PRINTER"
200 U = 16: VTAB U: INVERSE : INPUT "ENTER YOUR SELECTION: ";PRTYPE$:PRTYPE = VAL(PRTYPE$): NORMAL
210 IF PRTYPE < >1 AND PRTYPE < >2 THEN GOSUB 2100: GOTO 200
220 REM * ACCEPT REPORT DATE
230 VTAB 23: INVERSE : INPUT "ENTER REPORT DATE (MO,DY,YR): ";RMO,RDY,RYR: NORMAL
240 IF (RMO <1 OR RMO >12) OR (RDY <1 OR RDY >31) THEN GOSUB 2100: GOTO 230
300 D$ = CHR$(4): REM CTRL-D
310 DIM ACCT$(49),BGT(49),BAL(49,12)
320 DIM MPRCT(24),BPRCT(24),TACCT(24)
330 DIM MNAME$(12)
1000 REM *** MAIN MENU ***
1010 HOME : HTAB 13: PRINT "* MAIN MENU *"
1015 VTAB 23: PRINT "ENTER SLASH (/) TO RETURN TO MAIN MENU"
1020 VTAB 4: PRINT "1 = ENTER ACCOUNT NAMES"
1030 PRINT "2 = SET-UP MONTH BUDGET"
1040 PRINT "3 = REPORT/LIST OPTIONS"
1050 PRINT "4 = END"
1060 U = 10: VTAB U: INVERSE : INPUT "ENTER YOUR SELECTION: ";PR$:OM = VAL(PR$): NORMAL
1070 IF OM = 1 THEN GOTO 3000
1080 IF OM = 2 THEN GOTO 5000
1090 IF OM = 3 THEN GOTO 7000
1100 IF OM = 4 THEN END
1110 GOSUB 2100: GOTO 1060
2000 REM ** GENERAL PURPOSE ROUTINES
2100 IF PR$ = "/" THEN POP : GOTO 1000
2110 VTAB 23: CALL -958: PRINT CHR$(7)"INVALID ENTRY.. PLEASE REENTER": FOR X = 1 TO 1100: NEXT X: VTAB U: CALL -958: RETURN
2150 VTAB 23: PRINT "INVALID ENTRY.. PLEASE REENTER": RETURN
2200 VTAB 23: PRINT "INVALID LENGTH..MUST BE 1 - 16 CHARS."
2210 RETURN
2300 VTAB 23: PRINT "AMOUNT > REMAINING ";RBGT: RETURN
2400 Q = P:P = ABS(P)
2410 C = (P > = 10) +(P > = 100) +(P > = 1000) +(P > = 10000)
2415 IF P <1 AND P >0 THEN C = C -1: REM LINE UP CENTS ONLY #'S
2420 IF Q <0 THEN C = C +1
2430 RETURN
2900 PRINT "CHECK APPLESOFT MANUAL PG.136 FOR ERR."
2910 PRINT "THE ERROR IS #"; PEEK(222);"LOCATED IN LINE# "; PEEK(218) + PEEK(219) *256
2920 END
3000 REM * LOAD ACCOUNT TABLE ROUTINE
3010 ONERR GOTO 3900
3020 FLASH : PRINT "LOADING ACCOUNTS ": NORMAL :R = 0
3025 FDSW = 1
3030 PRINT D$"OPEN ACCOUNTS,L30"
3040 PRINT D$"READ ACCOUNTS,R0"
3050 IF FDSW = 1 THEN INPUT R
3060 FOR X = 1 TO 24
3070 PRINT D$"READ ACCOUNTS,R";X
3080 IF FDSW = 1 THEN INPUT ACCT$(X)
3090 NEXT X
3100 PRINT D$"CLOSE ACCOUNTS"
3105 ONERR GOTO 2900
3110 IF SW = 1 THEN SW = 0: GOTO 7130: REM RETURN TO LIST ACCTS
3120 IF SW = 2 THEN SW = 0: GOTO 7530: REM RETURN TO BGT COMPARISON
3500 REM * ENTER ACCOUNT NAME
3510 HOME : HTAB 8: PRINT "** ENTER ACCOUNT NAMES **"
3520 VTAB 5: INVERSE : PRINT "VALID EXPENSE ACCOUNT#'S ARE 1-24": PRINT "TYPE 'END' FOR MAIN MENU": NORMAL
3530 U = 9: VTAB U: CALL -958: INPUT "ACCOUNT NO: ";PR$:A$ = PR$
3540 IF A$ = "END" THEN GOTO 3700
3550 A = INT( VAL(A$))
3560 IF A <1 OR A >24 THEN GOSUB 2100: GOTO 3530
3565 IF ACCT$(A) = "" THEN GOTO 3610
3570 VTAB 11: CALL -868: PRINT "ACCOUNT NAME: ";ACCT$(A)
3580 VTAB 20: INVERSE : INPUT "ANY CHANGE? (Y/N) ";X$: NORMAL
3590 IF X$ = "N" THEN GOTO 3530
3600 IF X$ < >"Y" THEN GOSUB 2100: GOTO 3580
3610 VTAB 11: CALL -868: INPUT "ACCOUNT NAME: ";ACCT$(A)
3620 IF LEN(ACCT$(A)) <1 OR LEN(ACCT$(A)) >16 THEN GOSUB 2200: GOTO 3610
3630 GOTO 3530
3700 REM * WRITE OUT ACCOUNTS
3710 ONERR GOTO 2900
3715 FLASH : PRINT "WRITING ACCOUNTS FILE": NORMAL
3720 PRINT D$"OPEN ACCOUNTS,L30"
3730 PRINT D$"WRITE ACCOUNTS,R0"
3740 PRINT R
3750 FOR X = 1 TO 24
3760 PRINT D$"WRITE ACCOUNTS,R";X
3770 PRINT ACCT$(X): NEXT X
3780 PRINT D$"CLOSE ACCOUNTS"
3790 GOTO 1000: REM RETURN TO MAIN MENU
3900 REM * ACCOUNTS ERROR RTN
3910 ER = PEEK(222): POKE 216,0: IF ER < >5 THEN 2900
3920 PRINT D$"CLOSE ACCOUNTS"
3925 PRINT D$"OPENACCOUNTS,L30"
3930 FOR X = 1 TO 24:ACCT$(X) = "": NEXT X
3940 IF R < >49 THEN R = 24: REM ACCOUNTS IS SHARED BY INCOME TRAC
3950 FDSW = 0: RESUME
5000 REM ** ENTER MONTHLY BUDGET
5005 HOME : HTAB 8: PRINT "* ENTER BUDGET OPTIONS *"
5010 PRINT : PRINT "1 = SET-UP NEW BUDGET"
5015 PRINT "2 = CHANGE BUDGET ENTRIES"
5020 U = 6: VTAB U: INVERSE : INPUT "ENTER YOUR SELECTION: ";PR$:BM = VAL(PR$): NORMAL
5025 IF BM = 1 THEN GOTO 5040
5030 IF BM = 2 THEN GOTO 6500
5035 GOSUB 2100: GOTO 5020
5040 VTAB 8: PRINT "SETTING UP A NEW MONTHLY BUDGET": PRINT "WILL OVERLAY THE EXISTING BUDGET."
5045 VTAB 11: CALL -958: INVERSE : INPUT "SET UP A NEW BUDGET? (Y/N) ";X$: NORMAL
5050 IF X$ = "N" THEN GOTO 1000: REM RETURN TO MAIN MENU
5055 IF X$ < >"Y" THEN GOSUB 2100: GOTO 5045
5060 FOR X = 1 TO 24:BGT(X) = -999: NEXT X: REM INIT BGT TABLE
5200 VTAB 3: CALL -958
5210 PRINT "THE COMPUTER WILL ALLOCATE THE"
5220 PRINT "BUDGET TOTAL TO EACH 'UNSET' "
5230 PRINT "EXPENSE ACCOUNT ACCORDING TO ITS"
5240 PRINT "HISTORICAL CONTRIBUTION TO TOTAL "
5245 PRINT "SPENDING."
5250 PRINT : INPUT "ENTER BUDGET TOTAL: ";TBGT
5255 RBGT = TBGT
5260 VTAB 10: CALL -958: PRINT "IS THERE A BUDGET AMOUNT"
5270 INPUT "YOU WOULD LIKE TO SET? (Y/N) ";X$
5280 IF X$ = "N" AND BM = 1 THEN GOTO 5500
5285 IF X$ = "N" AND BM = 2 THEN GOTO 6200
5290 IF X$ < >"Y" THEN GOSUB 2100: GOTO 5260
5300 REM * ENTER FIXED BUDGET AMTS
5310 U = 14: VTAB U: INPUT "ENTER ACCOUNT #: ";PR$:A = VAL(PR$)
5320 A = INT(A): IF A <1 OR A >24 THEN GOSUB 2100: GOTO 5310
5330 U = 16: VTAB U: INPUT "ENTER BUDGET AMOUNT: ";PR$:BGT(A) = VAL(PR$)
5340 IF BGT(A) <0 THEN GOSUB 2100: GOTO 5330
5350 IF BM = 1 AND BGT(A) >RBGT THEN GOSUB 2300: GOTO 5330
5360 RBGT = RBGT -BGT(A)
5370 GOTO 5260
5500 REM ** GATHER ACTUAL EXPENSES RTN
5510 REM * READ YTD BALANCES
5515 ONERR GOTO 5555
5520 FLASH : PRINT "READING YTD FILES": NORMAL
5522 FDSW = 1
5525 PRINT D$"OPEN BALANCES"
5530 PRINT D$"READ BALANCES"
5535 FOR X = 1 TO 24: FOR N = 1 TO 12
5540 IF FDSW = 1 THEN INPUT BAL(X,N)
5545 NEXT N,X
5550 GOTO 5565
5555 REM * YTD ERROR RTN
5560 ER = PEEK(222): POKE 216,0: IF ER < >5 THEN 2900
5561 PRINT D$"CLOSEBALANCES"
5562 PRINT D$"OPENBALANCES"
5563 FDSW = 0: RESUME
5565 PRINT D$"CLOSE BALANCES"
5570 REM * ADD CARD FILE
5575 ONERR GOTO 5630
5580 FLASH : PRINT "READING CARD# FILE": NORMAL
5582 FDSW = 1
5585 PRINT D$"OPEN CARD #,L40"
5590 PRINT D$"READ CARD #,R0"
5595 IF FDSW = 1 THEN INPUT R
5600 FOR X = 1 TO R
5605 PRINT D$"READ CARD #,R";X
5610 IF FDSW = 1 THEN INPUT A,CNO,MO,DY,AMT
5615 IF FDSW = 1 THEN BAL(A,MO) = BAL(A,MO) +AMT
5620 NEXT X
5625 GOTO 5645
5630 REM * CARD ERROR RTN
5635 ER = PEEK(222): POKE 216,0
5640 IF ER < >5 THEN GOTO 2900
5641 PRINT D$"CLOSECARD #"
5642 PRINT D$"OPEN CARD #,L40"
5643 FDSW = 0: RESUME
5645 PRINT D$"CLOSE CARD #"
5650 REM * ADD CHECK FILE
5655 ONERR GOTO 5800
5660 FLASH : PRINT "READING CHECK # FILE": NORMAL
5662 FDSW = 1
5665 PRINT D$"OPEN CHECK #,L40"
5670 PRINT D$"READ CHECK #,R0"
5675 IF FDSW = 1 THEN INPUT R
5680 FOR X = 1 TO R
5685 PRINT D$"READ CHECK #,R";X
5690 INPUT A,CNO,MO,DY,AMT
5695 BAL(A,MO) = BAL(A,MO) +AMT
5700 NEXT X
5750 GOTO 5820
5800 REM * CHECK ERROR RTN
5810 ER = PEEK(222): POKE 216,0: IF ER < >5 THEN GOTO 2900
5811 PRINT D$"CLOSE CHECK #"
5812 PRINT D$"OPEN CHECK #,L40"
5813 FDSW = 0: RESUME
5820 PRINT D$"CLOSE CHECK #"
5825 ONERR GOTO 2900
5830 IF SW = 2 THEN SW = 0: GOTO 7520: REM RETURN TO BUDGET COMPARISON
6000 REM * CALCULATE MONTH AVERAGES
6010 GTACCT = 0
6020 FOR A = 1 TO 24
6030 IF BGT(A) < > -999 THEN GOTO 6080: REM SKIP 'SET' ACCTS
6035 TACCT(A) = 0
6040 FOR M = 1 TO 12
6050 TACCT(A) = TACCT(A) +BAL(A,M)
6060 GTACCT = GTACCT +BAL(A,M)
6070 NEXT M
6080 NEXT A
6085 IF GTACCT = 0 THEN GTACCT = 1
6090 FOR A = 1 TO 24
6100 IF BGT(A) < > -999 THEN GOTO 6120: REM SKIP SET ACCTS
6110 BGT(A) = (TACCT(A)/GTACCT) *RBGT
6115 BGT(A) = INT(BGT(A) +.5)
6120 NEXT A
6200 REM *WRITE OUT BUDGET FILE
6205 FLASH : PRINT "WRITING BUDGETS FILE": NORMAL
6210 PRINT D$"OPEN BUDGETS"
6220 PRINT D$"WRITE BUDGETS"
6230 PRINT 24
6235 FOR A = 1 TO 24
6240 PRINT BGT(A)
6245 NEXT A
6250 PRINT D$"CLOSE BUDGETS"
6255 PRINT D$
6260 GOTO 1000: REM MAIN MENU
6500 REM * CHANGE SPECIFIC BUDGET ENTRIES
6505 REM *LOAD BGT TABLE RTN
6510 TBGT = 0: FOR X = 1 TO 24:BGT(X) = 0: NEXT X
6515 ONERR GOTO 6590
6517 FLASH : PRINT "LOADING BUDGETS": NORMAL
6518 FDSW = 1
6520 PRINT D$"OPEN BUDGETS"
6525 PRINT D$"READ BUDGETS"
6530 IF FDSW = 1 THEN INPUT R
6535 IF R >24 THEN R = 24
6540 FOR X = 1 TO R
6550 IF FDSW = 1 THEN INPUT BGT(X)
6555 TBGT = TBGT +BGT(X)
6560 NEXT X
6562 GOTO 6567
6565 ER = PEEK(222): POKE 216,0: IF ER < >5 THEN GOTO 2900
6567 PRINT D$"CLOSE BUDGETS"
6568 PRINT D$
6569 ONERR GOTO 2900
6570 IF SW = 1 THEN SW = 0: GOTO 7120
6575 IF SW = 2 THEN SW = 0: GOTO 7540
6580 HOME : HTAB 9: PRINT "* CHANGE BUDGET AMTS *"
6585 GOTO 5260: REM UTILIZE THE UPDATE LOGIC OF THE SET-UP BUDGET OPTION
6590 PRINT D$"CLOSE BUDGETS"
6592 PRINT D$"OPEN BUDGETS"
6594 FDSW = 0: RESUME
7000 REM ** REPORT OPTIONS
7010 HOME : HTAB 10: PRINT "* REPORT OPTIONS *"
7020 PRINT : PRINT "1 = LIST ACCOUNTS & BUDGET"
7030 PRINT "2 = ACTUAL VS BUDGET COMPARISON"
7040 U = 6: VTAB U: INVERSE : INPUT "ENTER SELECTION: ";PR$:RP = VAL(PR$): NORMAL
7050 IF RP = 1 THEN GOTO 7100
7060 IF RP = 2 THEN GOTO 7500
7070 GOSUB 2100: GOTO 7040
7100 REM ** LIST ACCOUNTS
7110 SW = 1: GOTO 6505: REM LOAD BGT TABLE
7120 SW = 1: GOTO 3000: REM LOAD ACCT NAMES
7130 IF PRTYPE = 2 THEN GOTO 7300: REM LIST ACCTS ON PRINTER
7200 REM ** LIST ACCOUNTS ON SCREEN
7205 A = 0
7210 HOME : HTAB 11: PRINT "* LIST ACCOUNTS *": REM PAGE HEADING
7215 PRINT : PRINT " ACCT NAME";: HTAB 28: PRINT "BGT'D AMT"
7220 FOR X = 0 TO 39: PRINT "=";: NEXT X: PRINT
7225 PGCT = 0
7230 PGCT = PGCT +1
7235 IF PGCT >16 THEN VTAB 24: INVERSE : INPUT "HIT RETURN FOR NEXT PAGE ";X$: NORMAL : GOTO 7210
7240 A = A +1
7245 IF A >24 THEN GOTO 7270
7250 IF BGT(A) = 0 AND ACCT$(A) = "" THEN GOTO 7240: REM SKIP UNUSED ACCTS
7255 HTAB 2: PRINT A;: HTAB 6: PRINT ACCT$(A);
7260 P = BGT(A): GOSUB 2400: HTAB 34 -C: PRINT BGT(A)
7265 GOTO 7230
7270 HTAB 10: PRINT "* BUDGET TOTAL *";
7275 P = TBGT: GOSUB 2400: HTAB 34 -C: PRINT TBGT
7280 VTAB 24: INVERSE : INPUT "HIT RETURN FOR MAIN MENU ";X$: NORMAL : GOTO 1000
7300 REM * LIST ACCOUNTS ON PRINTER
7305 PRINT D$;"PR#1"
7310 PRINT CHR$(9);"40N"
7315 PRINT CHR$(2); CHR$(30)
7320 PRINT TAB( 11);"* LIST ACCOUNTS * ";RMO;"/";RDY;"/";RYR
7325 PRINT : POKE 36,2: PRINT "ACCT";: POKE 36,11: PRINT "NAME";: POKE 36,29: PRINT "BGT'D AMT"
7330 FOR X = 1 TO 39: PRINT "=";: NEXT X: PRINT
7335 FOR A = 1 TO R
7340 IF BGT(A) = 0 AND ACCT$(A) = "" THEN GOTO 7360: REM SKIP UNUSED ACCTS
7345 POKE 36,3: PRINT A;
7350 POKE 36,7: PRINT ACCT$(A);
7355 P = BGT(A): GOSUB 2400: POKE 36,(33 -C): PRINT BGT(A)
7360 NEXT A
7365 PRINT : POKE 36,11: PRINT "* BUDGET TOTAL *";
7370 P = TBGT: GOSUB 2400: POKE 36,(33 -C): PRINT TBGT
7375 PRINT CHR$(9);"40N"
7380 REM POKE 54,240:POKE 55,253
7382 PRINT D$;"PR#0"
7385 TEXT : GOTO 1000: REM RETURN TO MAIN MENU
7500 REM * BUDGET COMPARISON REPORT
7505 RESTORE : FOR X = 1 TO 12: READ MNAME$(X): NEXT X
7510 SW = 2: GOTO 5500: REM GET ACTUAL EXPENSES
7520 SW = 2: GOTO 3000: REM LOAD ACCT NAMES
7530 SW = 2: GOTO 6505: REM LOAD BUDGETS
7540 HOME : HTAB 9: PRINT "* BUDGET COMPARISON *"
7550 VTAB 3: PRINT "TYPE 'END' FOR MAIN MENU"
7560 PRINT : PRINT "ENTER THE MONTH WHOSE ACTUAL EXPENSES": PRINT "YOU WISH COMPARED TO THE BUDGET."
7570 U = 8: VTAB U: INVERSE : INPUT "ENTER MONTH #: ";PR$:MO$ = PR$: NORMAL
7575 IF MO$ = "END" THEN GOTO 1000
7580 MO = INT( VAL(MO$))
7585 IF MO <1 OR MO >12 THEN GOSUB 2100: GOTO 7570
7590 FOR X = 1 TO 24:MPRCT(X) = 0:BPRCT(X) = 0: NEXT X
7595 TMO = 0: REM INIT VARIABLES
7600 FOR A = 1 TO 24:TMO = TMO +BAL(A,MO): NEXT A
7605 FOR A = 1 TO 24
7610 IF TMO < >0 THEN MPRCT(A) = ((BAL(A,MO)/TMO) *100)
7612 MPRCT(A) = INT(MPRCT(A) +.5)
7615 IF TBGT < >0 THEN BPRCT(A) = ((BGT(A)/TBGT) *100)
7617 BPRCT(A) = INT(BPRCT(A) +.5)
7620 NEXT A
7625 IF PRTYPE = 2 THEN GOTO 7800: REM PRINTER BUDGET REPORT
7630 REM * SCREEN BUDGET REPORT
7635 A = 0:TDF = 0
7640 HOME : HTAB 9: PRINT "* BUDGET COMPARISON *": REM PAGE HEADING
7650 : PRINT : PRINT " ACCT ";MNAME$(MO);" %TOT BGT %TOT DIFF"
7655 FOR X = 0 TO 39: PRINT "=";: NEXT X: PRINT
7660 PGCT = 0
7665 PGCT = PGCT +1
7670 IF PGCT >16 THEN VTAB 24: INVERSE : INPUT "HIT RETURN FOR NEXT PAGE";X$: NORMAL : GOTO 7640
7675 A = A +1
7680 IF A >24 THEN GOTO 7740
7685 IF BAL(A,MO) = 0 AND BGT(A) = 0 AND ACCT$(A) = "" THEN GOTO 7675: REM SKIP UNUSED ACCTS
7690 PRINT LEFT$(ACCT$(A),9);
7695 P = BAL(A,MO): GOSUB 2400: HTAB 13 -C: PRINT BAL(A,MO);
7700 P = MPRCT(A): GOSUB 2400: HTAB 19 -C: PRINT MPRCT(A);
7705 P = BGT(A): GOSUB 2400: HTAB 24 -C: PRINT BGT(A);
7710 P = BPRCT(A): GOSUB 2400: HTAB 31 -C: PRINT BPRCT(A);
7715 X = (BAL(A,MO) -BGT(A)):X = INT(X *100 +.5)/100:TDF = TDF +X
7720 P = X: GOSUB 2400: HTAB 36 -C: PRINT X
7735 GOTO 7665
7740 PRINT : PRINT "*TOTALS*";
7742 TMO = INT(TMO *100 +.05)/100
7745 P = TMO: GOSUB 2400: HTAB 13 -C: PRINT TMO;
7749 TBGT = INT(TBGT *100 +.05)/100
7750 P = TBGT: GOSUB 2400: HTAB 24 -C: PRINT TBGT;
7754 TDF = INT(TDF *100 +.05)/100
7755 P = TDF: GOSUB 2400: HTAB 36 -C: PRINT TDF
7760 VTAB 24: INVERSE : INPUT "HIT RETURN FOR NEW MONTH SELECTION";X$: NORMAL : GOTO 7540
7800 REM ** PRINTER BUDGET REPORT
7810 T1OVER = 0:T2UNDER = 0
7820 PRINT D$;"PR#1"
7830 PRINT CHR$(9);"80N"
7840 PRINT CHR$(2); CHR$(30)
7850 PRINT TAB( 26);"* BUDGET COMPARISON *";
7860 PRINT SPC( 5)"FOR: ";RMO;"/";RDY;"/";RYR
7870 PRINT : PRINT "ACCT# ACCT NAME";
7880 POKE 36,27: PRINT MNAME$(MO);
7890 POKE 36,34: PRINT "%TOT BGT %TOT *OVER BGT/UNDER BGT*"
7900 FOR X = 1 TO 75: PRINT "=";: NEXT X: PRINT : PRINT
7910 FOR A = 1 TO 24
7920 IF BGT(A) = 0 AND ACCT$(A) = "" THEN GOTO 8030: REM SKIP UNUSED ACCTS
7930 PK = 2:V$ = STR$(A): GOSUB 80:
7940 PK = 6:V$ = ACCT$(A): GOSUB 80
7945 BAL(A,MO) = INT(BAL(A,MO) *100 +.05)/100
7950 P = BAL(A,MO): GOSUB 2400:PK = (29 -C):V$ = STR$(BAL(A,MO)): GOSUB 80
7960 P = MPRCT(A): GOSUB 2400:PK = (36 -C):V$ = STR$(MPRCT(A)): GOSUB 80
7970 P = BGT(A): GOSUB 2400:PK = (44 -C):V$ = STR$(BGT(A)): GOSUB 80
7980 P = BPRCT(A): GOSUB 2400:PK = (51 -C):V$ = STR$(BPRCT(A)): GOSUB 80
7990 X = (BAL(A,MO) -BGT(A)):X = INT(X *100 +.5)/100
7995 P = X: GOSUB 2400
8000 IF X >0 THEN PK = (60 -C):V$ = STR$(X): GOSUB 85:T1OVER = T1OVER +X
8010 IF X <0 THEN PK = (70 -C):V$ = STR$(X): GOSUB 85:T2UNDER = T2UNDER +X
8020 IF X = 0 THEN PK = 64:V$ = "*": GOSUB 85
8030 NEXT A
8035 FOR X = 1 TO 75: PRINT "-";: NEXT X: PRINT
8040 PRINT :PK = 2:V$ = "*TOTALS*": GOSUB 80
8049 TMO = INT(TMO *100 +.05)/100
8050 P = TMO: GOSUB 2400:PK = (29 -C):V$ = STR$(TMO): GOSUB 80
8059 TBGT = INT(TBGT *100 +.05)/100
8060 P = TBGT: GOSUB 2400:PK = (44 -C):V$ = STR$(TBGT): GOSUB 80
8069 T1OVER = INT(T1OVER *100 +.05)/100
8070 P = T1OVER: GOSUB 2400:PK = (60 -C):V$ = STR$(T1OVER): GOSUB 80
8079 T2UNDER = INT(T2UNDER *100 +.05)/100
8080 P = T2UNDER: GOSUB 2400:PK = (70 -C):V$ = STR$(T2UNDER): GOSUB 85
8090 NET = T1OVER +T2UNDER:NET = INT(NET *100 +.05)/100
8100 PRINT :PK = 2:V$ = "NET OVER-UNDER=": GOSUB 80:P = NET: GOSUB 2400:PK = 29 -C:V$ = STR$(NET): GOSUB 85
8130 PRINT CHR$(9);"40N"
8140 PRINT D$;"PR#0"
8150 TEXT : GOTO 1000: REM MAIN MENU
9000 DATA JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC